home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / game / misc / CCGames.lha / BATTLE.BAS < prev    next >
BASIC Source File  |  1980-01-01  |  9KB  |  265 lines

  1. 3 WIDTH 80:PRINT CHR$(26)
  2. 5 PRINT TAB(33);"BATTLE":PRINT
  3. 7 PRINT TAB(15);"CREATIVE COMPUTING  MORRISTOWN, NEW JERSEY":PRINT:PRINT
  4. 8 INPUT "DO YOU WANT INSTRUCTIONS";ANS$
  5. 9 IF LEFT$(ANS$,1)="Y" OR LEFT$(ANS$,1)="y" THEN GOSUB 10000
  6. 10 REM -- BATTLE WRITTEN BY RAY WESTERGARD  10/70
  7. 20 REM COPYRIGHT 1971 BY THE REGENTS OF THE UNIV. OF CALIF.
  8. 30 REM PRODUCED AT THE LAWRENCE HALL OF SCIENCE, BERKELEY
  9. 40 REM DIM F(6,6),H(6,6),A(4)<B(4),C(6),L(3)
  10. 50 FOR X=1 TO 6
  11. 51 FOR Y=1 TO 6
  12. 52 F(X,Y)=0
  13. 53 NEXT Y
  14. 54 NEXT X
  15. 60 FOR I=1 TO 3
  16. 70 N=4-I
  17. 80 FOR J=1 TO 2
  18. 90 A=INT(6*RND(1)+1)
  19. 100 B=INT(6*RND(1)+1)
  20. 110 D=INT(4*RND(1)+1)
  21. 120 IF F(A,B)>0 THEN 90
  22. 130 M=0
  23. 140 ON D GOTO 150,340,550,740
  24. 150 B(1)=B
  25. 160 B(2)=7:B(3)=7
  26. 170 FOR K=1 TO N
  27. 180 IF M>1 THEN 240
  28. 190 IF B(K)=6 THEN 230
  29. 200 IF F(A,B(K)+1)>0 THEN 230
  30. 210 B(K+1)=B(K)+1
  31. 220 GOTO 280
  32. 230 M=2
  33. 240 IF B(1)<B(2) AND B(1)<B(3) THEN Z=B(1)
  34. 242 IF B(2)<B(1) AND B(2)<B(3) THEN Z=B(2)
  35. 244 IF B(3)<B(1) AND B(3)<B(2) THEN Z=B(3)
  36. 250 IF Z=1 THEN 90
  37. 260 IF F(A,Z-1)>0 THEN 90
  38. 270 B(K+1)=Z-1
  39. 280 NEXT K
  40. 290 F(A,B)=9-2*I-J
  41. 300 FOR K=1 TO N
  42. 310 F(A,B(K+1))=F(A,B)
  43. 320 NEXT K
  44. 330 GOTO 990
  45. 340 A(1)=A
  46. 350 B(1)=B
  47. 360 A(2)=0:A(3)=0:B(2)=0:B(3)=0
  48. 370 FOR K=1 TO N
  49. 380 IF M>1 THEN 460
  50. 390 IF A(K)=1 OR B(K)=1 THEN 450
  51. 400 IF F(A(K)-1,B(K)-1)>0 THEN 450
  52. 410 IF F(A(K)-1,B(K))>0 AND F(A(K)-1,B(K))=F(A(K),B(K)-1) THEN 450
  53. 420 A(K+1)=A(K)-1
  54. 430 B(K+1)=B(K)-1
  55. 440 GOTO 530
  56. 450 M=2
  57. 460 IF A(1)>A(2) AND A(1)>A(3) THEN Z1=A(1)
  58. 462 IF A(2)>A(1) AND A(2)>A(3) THEN Z1=A(2)
  59. 464 IF A(3)>A(1) AND A(3)>A(2) THEN Z1=A(3)
  60. 470 IF B(1)>B(2) AND B(1)>B(3) THEN Z2=B(1)
  61. 474 IF B(2)>B(1) AND B(2)>B(3) THEN Z2=B(2)
  62. 476 IF B(3)>B(1) AND B(3)>B(2) THEN Z2=B(3)
  63. 480 IF Z1=6 OR Z2=6 THEN 90
  64. 490 IF F(Z1+1,Z2+1)>0 THEN 90
  65. 500 IF F(Z1,Z2+1)>0 AND F(Z1,Z2+1)=F(Z1+1,Z2) THEN 90
  66. 510 A(K+1)=Z1+1
  67. 520 B(K+1)=Z2+1
  68. 530 NEXT K
  69. 540 GOTO 950
  70. 550 A(1)=A
  71. 560 A(2)=7:A(3)=7
  72. 570 FOR K=1 TO N
  73. 580 IF M>1 THEN 640
  74. 590 IF A(K)=6 THEN 630
  75. 600 IF F(A(K)+1,B)>0 THEN 630
  76. 610 A(K+1)=A(K)+1
  77. 620 GOTO 680
  78. 630 M=2
  79. 640 IF A(1)<A(2) AND A(1)<A(3) THEN Z=A(1)
  80. 642 IF A(2)<A(1) AND A(2)<A(3) THEN Z=A(2)
  81. 644 IF A(3)<A(1) AND A(3)<A(2) THEN Z=A(3)
  82. 650 IF Z=1 THEN 90
  83. 660 IF F(Z-1,B)>0 THEN 90
  84. 670 A(K+1)=Z-1
  85. 680 NEXT K
  86. 690 F(A,B)=9-2*I-J
  87. 700 FOR K=1 TO N
  88. 710 F(A(K+1),B)=F(A,B)
  89. 720 NEXT K
  90. 730 GOTO 990
  91. 740 A(1)=A
  92. 750 B(1)=B
  93. 760 A(2)=7:A(3)=7
  94. 770 B(2)=0:B(3)=0
  95. 780 FOR K=1 TO N
  96. 790 IF M>1 THEN 870
  97. 800 IF A(K)=6 OR B(K)=1 THEN 860
  98. 810 IF F(A(K)+1,B(K)-1)>0 THEN 860
  99. 820 IF F(A(K)+1,B(K))>0 AND F(A(K)+1,B(K))=F(A(K),B(K)-1) THEN 860
  100. 830 A(K+1)=A(K)+1
  101. 840 B(K+1)=B(K)-1
  102. 850 GOTO 940
  103. 860 M=2
  104. 870 IF A(1)<A(2) AND A(1)<A(3) THEN Z1=A(1)
  105. 872 IF A(2)<A(1) AND A(2)<A(3) THEN Z1=A(2)
  106. 874 IF A(3)<A(1) AND A(3)<A(2) THEN Z1=A(3)
  107. 880 IF B(1)>B(2) AND B(1)>B(3) THEN Z2=B(1)
  108. 882 IF B(2)>B(1) AND B(2)>B(3) THEN Z2=B(2)
  109. 884 IF B(3)>B(1) AND B(3)>B(2) THEN Z2=B(3)
  110. 890 IF Z1=1 OR Z2=6 THEN 90
  111. 900 IF F(Z1-1,Z2+1)>0 THEN 90
  112. 910 IF F(Z1,Z2+1)>0 AND F(Z1,Z2+1)=F(Z1-1,Z2) THEN 90
  113. 920 A(K+1)=Z1-1
  114. 930 B(K+1)=Z2+1
  115. 940 NEXT K
  116. 950 F(A,B)=9-2*I-J
  117. 960 FOR K=1 TO N
  118. 970 F(A(K+1),B(K+1))=F(A,B)
  119. 980 NEXT K
  120. 990 NEXT J
  121. 1000 NEXT I
  122. 1010 PRINT
  123. 1020 PRINT "THE FOLLOWING CODE OF THE BAD GUYS' FLEET DISPOSITION"
  124. 1030 PRINT "HAS BEEN CAPTURED BUT NOT DECODED:"
  125. 1040 PRINT
  126. 1050 FOR I=1 TO 6
  127. 1051 FOR J=1 TO 6
  128. 1052 H(I,J)=F(J,I)
  129. 1053 NEXT J
  130. 1054 NEXT I
  131. 1060 FOR I=1 TO 6
  132. 1061 FOR J=1 TO 6
  133. 1062 PRINT H(I,J);
  134. 1063 NEXT J
  135. 1064 PRINT
  136. 1065 NEXT I
  137. 1070 PRINT
  138. 1080 PRINT "DE-CODE IT AND USE IT IF YOU CAN"
  139. 1090 PRINT "BUT KEEP THE DE-CODING METHOD A SECRET."
  140. 1100 PRINT
  141. 1102 INPUT "DO YOU WANT A PRINTED COPY OF THE CODED FLEET DISPOSITION";PC$
  142. 1106 INPUT "DO YOU WANT A PRINTED 6 BY 6 MATRIX TO RECORD YOUR RESULTS";PM$
  143. 1107 PRINT:PRINT
  144. 1108 IF LEFT$(PC$,1)="Y" OR LEFT$(PC$,1)="y" THEN GOSUB 20000
  145. 1109 IF LEFT$(PM$,1)="Y" OR LEFT$(PM$,1)="y" THEN GOSUB 30000
  146. 1110 FOR I=1 TO 6
  147. 1111 FOR J=1 TO 6
  148. 1112 H(I,J)=0
  149. 1113 NEXT J
  150. 1114 NEXT I
  151. 1120 FOR I=1 TO 3
  152. 1121 L(I)=0
  153. 1122 NEXT I
  154. 1130 C(1)=2:C(2)=2
  155. 1140 C(3)=1:C(4)=1
  156. 1150 C(5)=0:C(6)=0
  157. 1160 S=0:H=0
  158. 1170 PRINT "START GAME"
  159. 1175 PRINT "----------":PRINT
  160. 1180 PRINT:INPUT "ENTER X,Y COORDINATES OF BOMB TARGET";X,Y
  161. 1190 IF X<1 OR X>6 OR INT(X)<>ABS(X) THEN 1210
  162. 1200 IF Y>0 AND Y<7 AND INT(Y)=ABS(Y) THEN 1230
  163. 1210 PRINT:PRINT "INVALID INPUT.  TRY AGAIN."
  164. 1220 GOTO 1180
  165. 1230 R=7-Y
  166. 1240 C=X
  167. 1250 IF F(R,C)>0 THEN 1290
  168. 1260 S=S+1
  169. 1270 PRINT:PRINT "SPLASH!  TRY AGAIN."
  170. 1280 GOTO 1180
  171. 1290 IF C(F(R,C))<4 THEN 1340
  172. 1300 PRINT:PRINT "THERE USED TO BE A SHIP AT THAT POINT, BUT YOU SUNK IT."
  173. 1310 PRINT:PRINT "SPLASH!  TRY AGAIN."
  174. 1320 S=S+1
  175. 1330 GOTO 1180
  176. 1340 IF H(R,C)>0 THEN 1420
  177. 1350 H=H+1
  178. 1360 H(R,C)=F(R,C)
  179. 1370 PRINT:PRINT "A DIRECT HIT ON SHIP NUMBER";F(R,C)
  180. 1380 C(F(R,C))=C(F(R,C))+1
  181. 1390 IF C(F(R,C))>=4 THEN 1470
  182. 1400 PRINT:PRINT "TRY AGAIN."
  183. 1410 GOTO 1180
  184. 1420 PRINT:PRINT "YOU ALREADY PUT A HOLE IN SHIP NUMBER";F(R,C);
  185. 1430 PRINT "AT THAT POINT."
  186. 1440 PRINT:PRINT "SPLASH!  TRY AGAIN."
  187. 1450 S=S+1
  188. 1460 GOTO 1180
  189. 1470 L((INT(F(R,C)-1)/2)+1)=L((INT(F(R,C)-1)/2)+1)+1
  190. 1480 PRINT "AND YOU SUNK IT.  HURRAH FOR THE GOOD GUYS."
  191. 1490 PRINT:PRINT "SO FAR, THE BAD GUYS HAVE LOST"
  192. 1500 PRINT L(1);"DESTROYER(S),";L(2);"CRUISER(S), AND";
  193. 1510 PRINT L(3);"AIRCRAFT CARRIER(S)."
  194. 1520 PRINT:PRINT "YOUR CURRENT SPLASH/HIT RATIO IS";S/H
  195. 1530 IF (L(1)+L(2)+L(3))<6 THEN 1180
  196. 1540 PRINT
  197. 1550 PRINT:PRINT "YOU HAVE TOTALLY WIPED OUT THE BAD GUYS' FLEET"
  198. 1560 PRINT "WITH A FINAL SPLASH/HIT RATIO OF";S/H
  199. 1570 IF S/H>0 THEN 1590
  200. 1580 PRINT:PRINT "CONGRATULATIONS -- A DIRECT HIT EVERY TIME."
  201. 1590 PRINT
  202. 1600 PRINT "****************************"
  203. 1610 PRINT
  204. 1620 GOTO 50
  205. 1630 RUN "MENU"
  206. 10000 PRINT CHR$(26)
  207. 10010 PRINT "   BATTLE is based on the popular game of Battleship.":PRINT
  208. 10020 PRINT "   BATTLE first randomly sets up the Bad Guy's fleet disposition"
  209. 10030 PRINT "on a 6 by 6 matrix or grid. The fleet consists of six ships:"
  210. 10040 PRINT "Two destroyers (ships number 1 and 2) which are two units long,"
  211. 10050 PRINT "two cruisers (ships number 3 and 4) which are three units long"
  212. 10060 PRINT "and two aircraft carriers (ships number 5 and 6) which are"
  213. 10070 PRINT "four units long. This fleet disposition is printed out in a"
  214. 10080 PRINT "coded or disguised format. A hard copy is also available.":PRINT
  215. 10090 PRINT "   You then proceed to sink the various ships by typing in the"
  216. 10100 PRINT "coordinates (two digits, each from 1 to 6, separated by a comma)"
  217. 10110 PRINT "of the place where you want to drop a bomb. Record the results on"
  218. 10120 PRINT "a 6 by 6 matrix, which the computer will supply if you wish."
  219. 10130 PRINT "You are thus building a representation of the actual fleet"
  220. 10140 PRINT "disposition which you will hopefully use to decode the coded"
  221. 10150 PRINT "fleet disposition printed out by the computer. Each time a ship"
  222. 10160 PRINT "is sunk, the computer prints out which ships have been sunk so far"
  223. 10170 PRINT "and also gives you a SPLASH/HIT RATIO.":PRINT:PRINT
  224. 10180 LINE INPUT "Hit 'RETURN' to start the game.";RR$
  225. 10190 PRINT CHR$(26)
  226. 10200 RETURN
  227. 20000 '    PRINTED CODED FLEET DISPOSITION SUBROUTINE
  228. 20015 LPRINT TAB(5);"CODED FLEET DISPOSITION":LPRINT:LPRINT
  229. 20020 FOR I=1 TO 6
  230. 20030 FOR J=1 TO 6
  231. 20040 H(I,J)=F(J,I)
  232. 20050 NEXT J
  233. 20060 NEXT I
  234. 20070 FOR I=1 TO 6
  235. 20075 LPRINT "     ";
  236. 20080 FOR J=1 TO 6
  237. 20090 LPRINT H(I,J);" ";
  238. 20100 NEXT J
  239. 20110 LPRINT
  240. 20120 NEXT I
  241. 20125 IF LEFT$(PM$,1)="Y" OR LEFT$(PM$,1)="y" THEN LPRINT:LPRINT:LPRINT:LPRINT:
  242.       GOTO 20140
  243. 20130 LPRINT CHR$(12)
  244. 20140 RETURN
  245. 30000 '        PRINTED EMPTY MATRIX SUBROUTINE
  246. 30002 LPRINT:LPRINT:LPRINT
  247. 30004 LPRINT "EMPTY MATRIX FOR RECORDING HITS":LPRINT:LPRINT
  248. 30010 LPRINT "+---------------------------+"
  249. 30020 LPRINT "|   | 1 | 2 | 3 | 4 | 5 | 6 |"
  250. 30030 LPRINT "|---------------------------|"
  251. 30040 LPRINT "| 1 |   |   |   |   |   |   |"
  252. 30050 LPRINT "|---------------------------|"
  253. 30060 LPRINT "| 2 |   |   |   |   |   |   |"
  254. 30070 LPRINT "|---------------------------|"
  255. 30080 LPRINT "| 3 |   |   |   |   |   |   |" 
  256. 30090 LPRINT "|---------------------------|"
  257. 30100 LPRINT "| 4 |   |   |   |   |   |   |"
  258. 30110 LPRINT "|---------------------------|"
  259. 30120 LPRINT "| 5 |   |   |   |   |   |   |"
  260. 30130 LPRINT "|---------------------------|"
  261. 30140 LPRINT "| 6 |   |   |   |   |   |   |"
  262. 30150 LPRINT "+---------------------------+"
  263. 30160 LPRINT CHR$(12)
  264. 30170 RETURN
  265.